package br.com.beans;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import org.hibernate.Query;
import org.hibernate.Session;

import br.com.dominio.Cartao;
import br.com.util.Conexão;

public class CartaoList {

	private List<Cartao> listaCartoes = new ArrayList<Cartao>();
	private List<String> listaNomeCartao = new ArrayList<String>();
	private Map<String, String> listaModeloCartoes = new TreeMap<String, String>();
	private Map<String, String> listaTipoCartoes = new TreeMap<String, String>();
	private Map<String, Integer> listaNumeroCanaisCartoes =
			new TreeMap<String, Integer>();
	private Map<String, String> listaVerFirmwareCartoes = new TreeMap<String, String>();
	private Map<String, String> listaDataInstalacaoCartoes =
			new TreeMap<String, String>();
	private Map<String, Integer> listaPosicaoCartoesNumero =
			new TreeMap<String, Integer>();
	private Map<String, String> listaPosicaoCartoesString = new TreeMap<String, String>();

	// Abre uma conexão com o banco de dados
	private static Session sessao;

	public CartaoList() {
	}

	@SuppressWarnings("unchecked")
	public CartaoList(String nomeCPU, int numeroNode) {
		try {

			if (sessao == null) {
				sessao = new Conexão().getSession();
				System.out.println("CartaoLista >> Sessão aberta com sucesso.");
			}
			else {
				// System.out.println("CartaoLista >> Já existe sessão aberta");
			}

			try {

				Query q =
						sessao.createQuery("from Cartao as k where k.cpu.idCPU =:nomeCPU and k.node.idNode =:numeroNode");
				q.setParameter("nomeCPU", nomeCPU);
				q.setParameter("numeroNode", numeroNode);

				listaCartoes = q.list();

				int n = listaCartoes.size();
				System.out.println("CartaoLista >> Retornando "
						+ n + " itens.");

			}
			catch (Exception e) {
				System.out.println("CartaoLista >> Erro no query "
						+ e);
				e.printStackTrace();
			}

		}
		catch (Exception e) {
			System.err.println("CartaoLista >> Erro na sessão.");
			e.printStackTrace();
		}
		finally {

		}

		// Criando uma lista com os nomes das cpus, obtidos da pesquisa de
		// objetos
		for (Cartao c : listaCartoes) {

			this.listaNomeCartao.add(String.valueOf(c.getPosicao()));
			this.listaModeloCartoes.put(String.valueOf(c.getPosicao()), c.getModelo());
			this.listaTipoCartoes.put(String.valueOf(c.getPosicao()),
					String.valueOf(c.getTipo()));
			this.listaNumeroCanaisCartoes.put(String.valueOf(c.getPosicao()),
					c.getNumeroCanais());
			this.listaVerFirmwareCartoes.put(String.valueOf(c.getPosicao()),
					c.getVerFirmware());
			this.listaDataInstalacaoCartoes.put(String.valueOf(c.getPosicao()),
					c.getDataInstalacao());
			this.listaPosicaoCartoesNumero.put(String.valueOf(c.getPosicao()),
					c.getPosicao());
			this.listaPosicaoCartoesString.put(String.valueOf(c.getPosicao()),
					String.valueOf(c.getPosicao()));

		}

	}

	public List<Cartao> getListaCpus() {
		return listaCartoes;
	}

	public List<String> getListaNomeCartao() {
		return listaNomeCartao;
	}

	public Map<String, String> getListaModeloCartao() {
		return listaModeloCartoes;
	}

	public Map<String, String> getListaTipoCartao() {
		return listaTipoCartoes;
	}

	public Map<String, Integer> getListaNumeroCanais() {
		return listaNumeroCanaisCartoes;
	}

	public Map<String, String> getListaVerFirmwareCartaos() {
		return listaVerFirmwareCartoes;
	}

	public Map<String, String> getListaDataInstalacaoCartao() {
		return listaDataInstalacaoCartoes;
	}

	public Map<String, Integer> getListaPosicaoCartao() {
		return listaPosicaoCartoesNumero;
	}

	public static Session getSessao() {
		return sessao;
	}

	public Map<String, String> getListaPosicaoCartoesString() {
		return listaPosicaoCartoesString;
	}

}
